package {
	
	import br.com.damazzy.acompanharVendas.AcompanharVendasView;
	import br.com.damazzy.acompanharVendas.DetalharVenda;
	import br.com.damazzy.util.TratamentoErros;
	import br.com.damazzy.vo.VendaVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class AcompanharVendas extends AcompanharVendasView {
		
		[Bindable]
		private var lista: ArrayCollection;
		private var listaVendedores: ArrayCollection;
		private var listaClientes: ArrayCollection;
		private var _telaAplicacao: Aplicacao;
		
		public function AcompanharVendas() {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			include 'br/com/damazzy/util/RegistroVOs.as';
		}
		
		private function init(event: FlexEvent): void {
			
			btnPesquisar.addEventListener(MouseEvent.CLICK, pesquisar);
			btnDetalhar.addEventListener(MouseEvent.CLICK, detalhar);
			btnExcluir.addEventListener(MouseEvent.CLICK, alertaExcluir);
			btnFechar.addEventListener(MouseEvent.CLICK, _telaAplicacao.carregarTelaPrincipal);
			
			rm.obterDefinicoesAcompanharVendas.addEventListener(ResultEvent.RESULT, resultObterDefinicoesAcompanharVendas);
			rm.obterDefinicoesAcompanharVendas.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.pesquisar.addEventListener(ResultEvent.RESULT, resultPesquisar);
			rm.pesquisar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.excluir.addEventListener(ResultEvent.RESULT, resultExcluir);
			rm.excluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			rm.obterDefinicoesAcompanharVendas();
			
			limparDados();
		}
		
		private function resultObterDefinicoesAcompanharVendas(event: ResultEvent): void {
			listaVendedores = event.result.dados.listaVendedores;
			listaClientes = event.result.dados.listaCompradores;
			
			/* Cria o objeto vazio para a combo vendedores */
			var voVazia: VendaVO = new VendaVO();
			voVazia.nomeVendedor = "---";
			listaVendedores.addItemAt(voVazia, 0);
			cbxVendedor.dataProvider = listaVendedores;
			
			/* Cria o objeto vazio para a combo clientes */
			voVazia = new VendaVO();
			voVazia.nomeComprador = "---";
			listaClientes.addItemAt(voVazia, 0);
			cbxCliente.dataProvider = listaClientes;
		}
		
		private function pesquisar(event: MouseEvent = null): void {
			var vo: VendaVO = new VendaVO();
				
			if (cbxVendedor.selectedIndex != 0) {
				vo.idPessoaVendedor = cbxVendedor.selectedItem.idPessoaVendedor;	
			}
		
			if (cbxCliente.selectedIndex != 0) {
				vo.idPessoaComprador = cbxCliente.selectedItem.idPessoaComprador;
			}
			
			if (dtVenda.selectedDate != null) {
				vo.dataHora = dtVenda.dataFormatada;
			}
			
			vo.valorTotal = isNaN(txtValorSemDesconto.valor) || txtValorSemDesconto.valor == 0 ? null : txtValorSemDesconto.valor.toString();
			vo.valorTotalDesconto = isNaN(txtValorComDesconto.valor) || txtValorComDesconto.valor == 0 ? null : txtValorComDesconto.valor.toString();
			
			if (cbxVendaExcluida.selectedIndex != 0) {
				vo.bolExcluida = cbxVendaExcluida.selectedItem.valor;
			}
			
			rm.pesquisar(vo);
		}
		
		private function resultPesquisar(event: ResultEvent): void {
			lista = event.result.dados.lista;
			grdVendas.dataProvider = lista;
			
			if (lista.length == 0) {
				Alert.show("Não foi encontrada nenhuma venda pelo filtro informado.", "Aviso!");
			}
		}
		
		private function detalhar(event: MouseEvent): void {
			
			if (grdVendas.selectedItem != null) {
				var detalhar: DetalharVenda = new DetalharVenda();
				PopUpManager.addPopUp(detalhar, this, true);
				PopUpManager.centerPopUp(detalhar);
				detalhar.popularDados(grdVendas.selectedItem as VendaVO);
				
			} else {
				Alert.show("Selecione uma venda na lista para detalhar.", "Erro!");
			}
		}
		
		private function alertaExcluir(event: MouseEvent): void {
			if (grdVendas.selectedItem != null) {
				
				if (grdVendas.selectedItem.bolExcluida == "false") {
					Alert.yesLabel = "Sim";
	                Alert.noLabel = "Não";
					Alert.show("Deseja realmente excluir a venda selecionada?", "Exclusão", 1|2, this, excluir);	
				} else {
					Alert.show("Essa venda já encontra-se excluída e consta no sistema somente para fins de histórico.", "Aviso!");
				}
				
			} else {
				Alert.show("Selecione uma venda na lista para excluir.", "Aviso!");
			}
		}
		
		private function excluir(event: CloseEvent): void {
			
			if (event.detail == Alert.YES) {
				var vendaExcluida: VendaVO = grdVendas.selectedItem as VendaVO;
				rm.excluir(vendaExcluida);
			}
		}
		
		private function resultExcluir(result: ResultEvent): void {
			Alert.show("Venda excluída com sucesso.", "Aviso!");
			pesquisar();
		}
		
		public function limparDados(event: Event = null): void {
			cbxVendedor.selectedIndex = 0;
			cbxCliente.selectedIndex = 0;
			dtVenda.selectedDate = new Date();
			txtValorSemDesconto.text = "";
			txtValorComDesconto.text = "";
			cbxVendaExcluida.selectedIndex = 0;
			
			lista = new ArrayCollection();
			grdVendas.dataProvider = lista;
		}
		
		public function set telaAplicacao(tela: Aplicacao): void {
			_telaAplicacao = tela;
		}
	}
}